package negocio;

import java.awt.List;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;

public class Comanda {

	
	
	private int NroComanda;
	private String estado;
	private Date hora;
	private Mozo mozo;
	private Collection<ItemComanda> itemsComanda;
	private int cantidadPersonas;
	private int tiempoDeDemora;
	public Comanda() {
		super();
	}
	public Comanda(Mozo mozo, Collection<ItemComanda> itemsComanda,
			int cantidadPersonas) {
		super();
		this.mozo = mozo;
		this.itemsComanda = itemsComanda;
		this.cantidadPersonas = cantidadPersonas;
	}
	public Comanda(int nroComanda, String estado, Date hora, Mozo mozo,
			Collection<ItemComanda> itemsComanda, int cantidadPersonas,
			int tiempoDeDemora) {
		super();
		NroComanda = nroComanda;
		this.estado = estado;
		this.hora = hora;
		this.mozo = mozo;
		this.itemsComanda = itemsComanda;
		this.cantidadPersonas = cantidadPersonas;
		this.tiempoDeDemora = tiempoDeDemora;
	}
	public int getNroComanda() {
		return NroComanda;
	}
	public void setNroComanda(int nroComanda) {
		NroComanda = nroComanda;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	public Date getHora() {
		return hora;
	}
	public void setHora(Date hora) {
		this.hora = hora;
	}
	public Mozo getMozo() {
		return mozo;
	}
	public void setMozo(Mozo mozo) {
		this.mozo = mozo;
	}
	public Collection<ItemComanda> getItemsComanda() {
		return itemsComanda;
	}
	public void setItemsComanda(Collection<ItemComanda> itemsComanda) {
		this.itemsComanda = itemsComanda;
	}
	public int getCantidadPersonas() {
		return cantidadPersonas;
	}
	public void setCantidadPersonas(int cantidadPersonas) {
		this.cantidadPersonas = cantidadPersonas;
	}
	public int getTiempoDeDemora() {
		return tiempoDeDemora;
	}
	public void setTiempoDeDemora(int tiempoDeDemora) {
		this.tiempoDeDemora = tiempoDeDemora;
	}
	public Boolean estasPendiente()
	{
		return estado.equals("pendiente")|| estado.equals("Pendiente");
	}
	public void agregarItem(ItemComanda item)
	{
		itemsComanda.add(item);
	}
	public Boolean eliminarItem(ItemComanda item)
	{
		Collection<ItemComanda> itemsAux = new ArrayList<ItemComanda>();
		//Si existe la comanda, recien ahi procedo con la eliminacion.
		if(contieneItem(itemsComanda,item))
		{
			//Primero saco al item de la lista de items en memoria de esta comanda.
			
			for(ItemComanda it: itemsComanda)
				if(it.getNroItem()!=item.getNroItem())
					itemsAux.add(it);
			itemsComanda=itemsAux;
			//Luego la saco de la BDD.
//			DAOItemComanda.borrarItem(item.getNroItem());
			return true;
		}
		return false;
	}
	public boolean modificarItem(int NroItem, int cantidad, Plato plato)
	{
		Collection<ItemComanda> itemsAux = new ArrayList<ItemComanda>();
		//Si existe la comanda, recien ahi procedo con la modificacion.
		if(contieneItem(itemsComanda,new ItemComanda(NroItem,0,null)))
		{
			//Primero recorro la lista de items, si encuentro el que voy a modificar, lo cambio y lo agrego a una lista aux que al final voy a copiar en memoria
			
			for(ItemComanda it: itemsComanda)
				if(it.getNroItem()!=NroItem)
					itemsAux.add(it);
				else
					itemsAux.add(new ItemComanda(NroItem, cantidad, plato));
			itemsComanda=itemsAux;
			//Luego la modifico en la BDD.
//			DAOItemComanda.modificarItem(NroItem,cantidad, plato);
			return true;
		}
		return false;
	}
	private boolean contieneItem(Collection<ItemComanda> items, ItemComanda item)
	{
		for(ItemComanda it: items)
			if(it.getNroItem()==item.getNroItem())
				return true;
		return false;
	}
	public void demorar(int tiempo)
	{
		tiempoDeDemora = this.tiempoDeDemora + tiempo;
	}
	public void cambiarEstadoAEnEspera()
	{
		estado="En Espera";
	}
	public void cambiarEstadoAEnPreparacion()
	{
		estado="En Preparacion";
	}
	public void cambiarEstadoAFinalizada()
	{
		estado="Finalizada";
	}
	
}
